package com.rongx.reggie.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rongx.reggie.common.R;
import com.rongx.reggie.dto.DishDto;
import com.rongx.reggie.entity.Dish;
import com.rongx.reggie.service.DishService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 菜品管理控制器
 *
 * @author rongx
 */
@Slf4j
@RestController
@RequestMapping("/dish")
@RequiredArgsConstructor
public class DishController {

    private final DishService dishService;


    /**
     * 新增菜品
     *
     * @param dishDto 菜品传输对象
     * @return 操作结果
     */
    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto) {
        log.info(dishDto.toString());
        dishService.saveWithFlavor(dishDto);
        return R.success("新增菜品success");
    }

    /**
     * 菜品信息分页查询
     *
     * @param page     页码
     * @param pageSize 每页大小
     * @param name     菜品名称
     * @return 分页结果
     */
    @GetMapping("/page")
    public R<Page<DishDto>> page(int page, int pageSize, String name) {
        return R.success(dishService.getPage(page, pageSize, name));
    }

    /**
     * 根据id查询菜品信息和对应的口味信息
     *
     * @param id 菜品ID
     * @return 菜品信息
     */
    @GetMapping("/{id}")
    public R<DishDto> get(@PathVariable Long id) {
        return R.success(dishService.getByIdWithFlavor(id));
    }

    /**
     * 修改菜品
     *
     * @param dishDto 菜品传输对象
     * @return 操作结果
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto) {
        log.info(dishDto.toString());
        dishService.updateWithFlavor(dishDto);
        return R.success("修改菜品成功");
    }

    /**
     * 菜品停售/起售 单个操作
     * 接口example：<a href="http://localhost:8080/dish/status/0?ids=1977340459114397697">...</a>
     *
     * @param status 状态值(0-停售, 1-起售)
     * @param ids    菜品ID
     * @return 操作结果
     */
    @PostMapping("/status/{status}")
    public R<String> updateStatus(@PathVariable Integer status, @RequestParam Long ids) {
        if (dishService.updateStatus(status, ids)!=null) {
            String action = status == 1 ? "起售" : "停售";
            return R.success("菜品" + action + "成功");
        } else {
            return R.error("操作失败");
        }
    }

    /**
     * 批量起售停售
     *
     * @param status 状态值(0-停售, 1-起售)
     * @param ids    菜品ID列表(逗号分隔)
     */
    @PostMapping("/status/batch/{status}")
    public void batchUpdateStatus(@PathVariable Integer status, @RequestParam String ids) {
        dishService.batchUpdateStatus(status, ids);
    }

    /**
     * 根据条件查询对应的菜品数据
     *
     * @param dish 查询条件
     * @return 菜品列表
     */
    @GetMapping("/list")
    public R<List<DishDto>> list(Dish dish) {
        return R.success(dishService.getList(dish));
    }

    /**
     * 删除菜品（支持批量删除）
     *
     * @param ids 菜品ID列表(逗号分隔)
     * @return 操作结果
     */
    @DeleteMapping
    public R<String> delete(@RequestParam String ids) {
        log.info("删除菜品: ids={}", ids);
        return dishService.deleteByIds(ids);
    }
}
